package structure.Proxy;

/**
 * Created by LYJ on 2016/10/19.
 * 详细链接：Proxy（代理）http://blog.csdn.net/u013256816/article/details/51009592
 */
public class MainTest {
    public static void main(String... args) {
        //静态代理
        Subject subject=new Proxys();
        subject.operate();
        System.out.println("-------------------");


        //动态代理
        Subject subject1= (Subject) new ProxyHandler().newProxyInstance(new RealSubject());
        subject1.operate();
    }
}
/*
 Jdk的动态代理是基于接口的。现在想要为RealSubject这个类创建一个动态代理对象，Jdk主要会做一下工作：
获取RealSubject上的所有接口列表
确定要生成的代理类的类名，默认为：com.sun.proxy.$ProxyXXXX；
根据需要实现的接口信息，在代码中动态创建该Proxy类的字节码；
将对应的字节码转换为对于的class对象；
创建InvocationHandler实例handler,用来处理Proxy所有方法的调用；
Proxy的class对象以创建的handler对象为参数，实例化一个proxy对象；
Jdk通过Java.lang.reflect.Proxy包来支持动态代理，在Java中要创建一个代理对象，
必须调用Proxy类的静态方法newProxyInstance
 */